home *** CD-ROM | disk | FTP | other *** search
- ;/* boopsi1.c - Execute me to compile me with SAS/C 6.56
- sc DATA=NEAR NMINC STRMERGE STREQ NOSTKCHK SAVEDS IGNORE=73 boopsi1.c
- slink FROM LIB:c.o,boopsi1.o TO boopsi1 LIBRARY LIB:sc.lib,LIB:Amiga.lib
- quit
- */
-
- /* boopsi example showing simple creation of boopsi
- ** gadgets and using system images.
- */
- /*
- Copyright (c) 1991-1999 Amiga, Inc.
-
- This example is provided in electronic form by Amiga, Inc.
- for use with the Amiga Mail Volume II technical publication.
- Amiga Mail Volume II contains additional information on the correct
- usage of the techniques and operating system functions presented in
- these examples. The source and executable code of these examples may
- only be distributed in free electronic form, via bulletin board or
- as part of a fully non-commercial and freely redistributable
- diskette. Both the source and executable code (including comments)
- must be included, without modification, in any copy. This example
- may not be published in printed form or distributed with any
- commercial product. However, the programming techniques and support
- routines set forth in these examples may be used in the development
- of original executable software products for Amiga
- computers.
-
- All other rights reserved.
-
- This example is provided "as-is" and is subject to change; no
- warranties are made. All use is at your own risk. No liability or
- responsibility is assumed.
- */
-
- #include <intuition/intuition.h>
- #include <intuition/classusr.h>
- #include <intuition/imageclass.h>
- #include <intuition/gadgetclass.h>
- #include <clib/exec_protos.h>
- #include <clib/intuition_protos.h>
- #include <clib/graphics_protos.h>
-
- #ifdef LATTICE
- int CXBRK(void) { return(0); } /* Disable Lattice CTRL/C handling */
- int chkabort(void) { return(0); }
- #endif
-
- UBYTE *vers = "\0$VER: boopsi1 1.0";
-
- void ProcessWindow(void);
-
- #define MYPROP 1L
- #define MYSTRING 2L
- #define MYLEFTBUT 3L
- #define MYRIGHTBUT 4L
-
- #define GADTOP 10L
- #define STRLEFT 20L
- #define STRWIDTH 30L
- #define STRHEIGHT 11L
- #define INITVALUE 25L
- #define PROPWIDTH 100L
- #define PROPVIS 10L
- #define BUTGADWID 11L
- #define BUTGADHEI 11L
-
- struct Screen *screen;
- struct Window *window;
- struct DrawInfo *drinfo;
- struct Library *IntuitionBase;
- struct Gadget *prop, *string, *leftbut, *rightbut, *mygadgets;
- struct Image *rightbimage, *leftbimage;
-
-
-
- void main(void)
- {
- struct Gadget *tmpgad;
- WORD gadtop;
-
- tmpgad = (struct Gadget *)&mygadgets;
-
- if (IntuitionBase = OpenLibrary("intuition.library", 36L))
- {
- if (screen = LockPubScreen(NULL))
- {
- /* need my screen's DrawInfo for the system gadget images */
- drinfo = GetScreenDrawInfo(screen);
-
- gadtop = screen->Font->ta_YSize + GADTOP;
- if (window = OpenWindowTags(NULL,
- WA_Title, (ULONG *)"AMail boopsi1",
- WA_Height, gadtop+STRHEIGHT+10L,
- WA_Width, STRLEFT+STRWIDTH+PROPWIDTH+2*BUTGADWID+15,
- WA_Flags, WFLG_DEPTHGADGET | WFLG_DRAGBAR | WFLG_CLOSEGADGET,
- WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_GADGETUP,
- TAG_END))
- {
-
- /* Create a boopsi string gadget */
- if (string = (struct Gadget *)NewObject(NULL, "strgclass",
- /* All the normal Gadget fields */
- GA_ID, MYSTRING,
- GA_Immediate, TRUE,
- GA_RelVerify, TRUE,
- GA_Top, gadtop,
- GA_Left, STRLEFT,
- GA_Width, STRWIDTH,
- GA_Height, STRHEIGHT,
- STRINGA_MaxChars, 3,
- STRINGA_LongVal, INITVALUE,
- STRINGA_Justification, STRINGRIGHT,
-
- /* Boopsi makes it easy to link gadgets together.
- ** The GA_Previous tag accepts a (struct Gadget **)
- ** to the previous gadget in the list, then changes
- ** this value to point to the gadget being
- ** created (in this case, "string").
- */
- GA_Previous, tmpgad,
- TAG_END))
- {
- /* create the prop gadget */
- if (prop = (struct Gadget *)NewObject(NULL, "propgclass",
- GA_Immediate, TRUE,
- GA_RelVerify, TRUE,
- PGA_Freedom, FREEHORIZ,
- PGA_Borderless, FALSE,
- GA_Left, STRLEFT + STRWIDTH,
- GA_Top, gadtop,
- GA_Height, BUTGADHEI,
- PGA_Top, INITVALUE,
- PGA_Visible, PROPVIS,
- PGA_Total, PROPWIDTH,
- GA_ID, MYPROP,
-
- /* link prop to string and
- ** make tmpgad point to prop. */
- GA_Previous, tmpgad,
- TAG_END))
- {
- /* Ask the system for a left arrow image
- ** for the left arrow gadget. */
- if (leftbimage = (struct Image *)NewObject(NULL,
- "sysiclass",
-
- /* boopsi needs this screen's DrawInfo
- ** structure to get the right image. */
- SYSIA_DrawInfo, drinfo,
- SYSIA_Which, LEFTIMAGE,
-
- /* this will give us 11 x 11 buttons */
- SYSIA_Size, SYSISIZE_MEDRES,
- TAG_END))
- {
- /* Now ask for a right arrow */
- if (rightbimage = (struct Image *)NewObject(NULL,
- "sysiclass",
- SYSIA_DrawInfo, drinfo,
- SYSIA_Which, RIGHTIMAGE,
- SYSIA_Size, SYSISIZE_MEDRES,
- TAG_END))
- {
- /* Create the left button */
- if (leftbut = (struct Gadget *)NewObject(NULL,
- "buttongclass",
- GA_ID, MYLEFTBUT,
- GA_Immediate, TRUE,
- GA_RelVerify, TRUE,
- GA_Image, leftbimage,
- GA_Top, gadtop,
- GA_Left, STRLEFT+STRWIDTH+PROPWIDTH-15,
- GA_Width, BUTGADWID,
- GA_Height, BUTGADHEI,
- GA_Previous, tmpgad,
- TAG_END))
- {
- /* Create the right button */
- if (rightbut = (struct Gadget *)NewObject(NULL,
- "buttongclass",
- GA_ID, MYRIGHTBUT,
- GA_Immediate, TRUE,
- GA_RelVerify, TRUE,
- GA_Image, rightbimage,
- GA_Top, gadtop,
- GA_Left,
- STRLEFT+STRWIDTH+PROPWIDTH+BUTGADWID-10,
- GA_Width, BUTGADWID,
- GA_Height, BUTGADHEI,
- GA_Previous, tmpgad,
- TAG_END))
- {
- /* All of the gadgets have been created
- ** and linked together. Add them to the
- ** display and display them.
- */
- AddGList(window, mygadgets, -1, -1, NULL);
- RefreshGList(mygadgets, window, NULL, -1);
- ProcessWindow();
- RemoveGList(window, mygadgets, -1);
- DisposeObject(rightbut);
- }
- DisposeObject(leftbut);
- }
- DisposeObject(rightbimage);
- }
- DisposeObject(leftbimage);
- }
- DisposeObject(prop);
- }
- DisposeObject(string);
- }
- CloseWindow(window);
- }
- FreeScreenDrawInfo(screen, drinfo);
- UnlockPubScreen(NULL, screen);
- }
- CloseLibrary(IntuitionBase);
- }
- }
-
- void ProcessWindow(void)
- {
- struct IntuiMessage *imsg;
- BOOL returnvalue = TRUE;
- ULONG class;
- LONG currval = INITVALUE;
- struct Gadget *g;
-
-
- while (returnvalue)
- {
- WaitPort(window->UserPort);
- while (imsg = (struct IntuiMessage *)GetMsg(window->UserPort))
- {
- g = (struct Gadget *)imsg->IAddress;
- class = imsg->Class;
- ReplyMsg((struct Message *)imsg);
- switch (class)
- {
- case IDCMP_CLOSEWINDOW:
- returnvalue = FALSE;
- break;
- case IDCMP_GADGETUP:
- switch (g->GadgetID)
- {
- case MYLEFTBUT:
- currval--;
- break;
- case MYRIGHTBUT:
- currval++;
- break;
- case MYPROP:
- /* read the prop gadget's value */
- GetAttr(PGA_TOP, prop, &currval);
- break;
- case MYSTRING:
- /* read the string gadget's value */
- GetAttr(STRINGA_LongVal, string, &currval);
- break;
- }
- /* make sure the value is between 0 and 90 */
- if (currval < 0L)
- currval = 0L;
- else
- if (currval > PROPWIDTH - PROPVIS)
- currval = PROPWIDTH - PROPVIS;
-
- /* Update the values of the prop and string.
- ** gadgets (Intuition takes care of the refresh). */
-
- SetGadgetAttrs( prop, window, NULL,
- PGA_TOP, currval,
- TAG_END );
-
- SetGadgetAttrs( string, window, NULL,
- STRINGA_LongVal, currval,
- TAG_END );
-
- break;
- }
- }
- }
- }
-